package top.kaoshanji.p2ch14b;

/**
 * 代码清单-p2ch14b-153页b：具体中介者
 * @author kaoshanji
 * ^_^
 * create time 2025/3/23 14:24
 */
public class Mediator extends AbstractMediator {

    // 中介者最重要的方法
    @Override
    public void execute(String str, Object... objects) {

        if (str.equals(ExecuteType.PURCHASE_BUY)) { // 采购电脑
            this.buyComputer((Integer) objects[0]);
        } else if (str.equals(ExecuteType.SALE_SELL)) { // 销售电脑
            this.sellComputer((Integer) objects[0]);
        } else if (str.equals(ExecuteType.SALE_OFFSELL)) { // 折价销售
            this.offSell();
        } else if (str.equals(ExecuteType.STOCK_CLEAR)) { // 清仓处理
            this.clearStock();
        }

    }

    // 采购电脑
    private void buyComputer(int number) {

        int saleStatus = super.sale.getSaleStatus();
        if (saleStatus > 80) { // 销售情况良好
            System.out.println("采购IBM电脑：" + number + " 台");
            super.stock.increase(number);
        } else { // 销售情况不好
            int buyNumber = number/2; // 折半采购
            System.out.println("采购IBM电脑：" + buyNumber + " 台");
        }

    }

    // 销售电脑
    private void sellComputer(int number) {

        if (super.stock.getStockNumber() < number) { // 库存数量不够销售
            super.purchase.buyIBMComputer(number);
        }

        super.stock.decrease(number);
    }

    // 折价销售电脑
    private void offSell() {
        System.out.println("折价销售IBM电脑：" + super.stock.getStockNumber() + " 台");
    }

    // 清仓处理
    private void clearStock() {
        // 要求清仓销售
        super.sale.offSale();
        // 要求采购人员不要采购
        super.purchase.refuseBuyIBM();
    }

}
